package com.hyl.auth.utils;

/**
 * @Description TODO
 * @Author hyl
 * @Date 2023/6/19 17:00
 **/

import lombok.Data;

/**
 * 全局统一返回结果类
 */
@Data
public class Result<T> {
	private Boolean success;//是否成功
	private Integer code;//状态码
	private String message;//返回消息
	private T data;//返回数据
	/**
	 * 私有化构造方法，禁止在其它类创建对象
	 */
	private Result(){}
	/**
	 * 成功执行，不返回数据
	 * @return
	 */
	public static<T> Result<T> ok(){
		Result<T> result = new Result<T>();
		result.setSuccess(true);
		result.setCode(ResultCode.SUCCESS);
		result.setMessage("执行成功");
		return result;
	}

	/**
	 * 成功执行，并返回数据
	 * @param data
	 * @param <T>
	 * @return
	 */
	public static<T> Result<T> ok(T data){
		Result<T> result = new Result<T>();
		result.setSuccess(true);
		result.setCode(ResultCode.SUCCESS);
		result.setMessage("执行成功");
		result.setData(data);
		return result;
	}

	/**
	 * 错误
	 * @param <T>
	 * @return
	 */
	public static<T> Result<T> error(){
		Result<T> result = new Result<T>();
		result.setSuccess(false);
		result.setCode(ResultCode.ERROR);
		result.setMessage("执行失败");
		return result;
	}

	/**
	 * 设置是否成功
	 * @param success
	 * @return
	 */
	public Result<T> success(Boolean success){
		this.setSuccess(success);
		return this;
	}

	/**
	 * 设置状态码
	 * @param code
	 * @return
	 */
	public Result<T> code(Integer code){
		this.setCode(code);
		return this;
	}

	/**
	 * 设置返回消息
	 * @param message
	 * @return
	 */
	public Result<T> message(String message){
		this.setMessage(message);
		return this;
	}

	/**
	 * 是否存在
	 * @param <T>
	 * @return
	 */
	public static<T> Result<T> exist(){
		Result<T> result = new Result<T>();
		result.setSuccess(true);
		result.setCode(ResultCode.SUCCESS);
		result.setMessage("执行成功");
		return result;
	}
}

